定期ミートアップ 第47回
Shiika IO
IOにおける「RubyとRustの間」とは?
Ruby: IO
Rust: Read, BufRead, BufReader, Write, BufWrite, BufWriter
「性能を犠牲にしてよい」としたらバッファリングはデフォルトで行って良いのではないか
バッファサイズくらいは指定したい気はする
code:sk
module Readable
# バッファがいっぱいになるまで読む
# 返り値:
# エラー、またはバッファの内容
requirement fill_buf -> Result<MutableString>
# どこまで消費したかを報告する
requirement consume(n_bytes: Int)
def read_line -> Result<String>
let l = MutableString.new
loop do
match fill_buf
when Ok(s)
if s.bytesize == 0
return l._unsafe_to_s
end
s.each_byte do |b|
l.append_byte(b)
consume(1)
if b == 10 # LF(\n)
return l._unsafe_to_s
end
end
when Fail(e)
return Fail(e)
end
end
end
def read -> String
let l = MutableString.new
loop do
match fill_buf
when Ok(s)
if s.length == 0
return l._unsafe_to_s
end
l.append(s)
consume(s.bytesize)
when Fail(e)
return Fail(e)
end
end
end
end